package com.zenithmind.version.pojo.dto;

import com.zenithmind.version.pojo.dto.base.BaseDTO;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.Size;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 仓库初始化DTO - 遵循单一职责原则，只包含仓库初始化相关信息
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Schema(description = "仓库初始化DTO")
public class RepositoryInitDTO extends BaseDTO {

    /**
     * 是否初始化README（0-否，1-是）
     */
    @Schema(description = "是否初始化README（0-否，1-是）", example = "1")
    private Integer initReadme = 1;

    /**
     * 是否添加.gitignore（0-否，1-是）
     */
    @Schema(description = "是否添加.gitignore（0-否，1-是）", example = "1")
    private Integer initGitignore = 1;

    /**
     * .gitignore模板
     */
    @Size(max = 50, message = ".gitignore模板名称长度不能超过50")
    @Schema(description = ".gitignore模板", example = "Java")
    private String gitignoreTemplate;

    /**
     * 是否添加LICENSE（0-否，1-是）
     */
    @Schema(description = "是否添加LICENSE（0-否，1-是）", example = "0")
    private Integer initLicense = 0;

    /**
     * LICENSE模板
     */
    @Size(max = 50, message = "LICENSE模板名称长度不能超过50")
    @Schema(description = "LICENSE模板", example = "MIT")
    private String licenseTemplate;

    /**
     * 检查是否初始化README
     * 
     * @return 是否初始化README
     */
    public boolean isInitReadme() {
        return Integer.valueOf(1).equals(this.initReadme);
    }

    /**
     * 检查是否初始化.gitignore
     * 
     * @return 是否初始化.gitignore
     */
    public boolean isInitGitignore() {
        return Integer.valueOf(1).equals(this.initGitignore);
    }

    /**
     * 检查是否初始化LICENSE
     * 
     * @return 是否初始化LICENSE
     */
    public boolean isInitLicense() {
        return Integer.valueOf(1).equals(this.initLicense);
    }

    /**
     * 检查是否需要初始化任何文件
     * 
     * @return 是否需要初始化
     */
    public boolean needsInitialization() {
        return isInitReadme() || isInitGitignore() || isInitLicense();
    }

    /**
     * 获取需要初始化的文件数量
     * 
     * @return 文件数量
     */
    public int getInitFileCount() {
        int count = 0;
        if (isInitReadme()) count++;
        if (isInitGitignore()) count++;
        if (isInitLicense()) count++;
        return count;
    }

    /**
     * 验证模板配置
     * 
     * @return 是否有效
     */
    public boolean isValidTemplateConfig() {
        // 如果要初始化.gitignore但没有指定模板，则无效
        if (isInitGitignore() && (gitignoreTemplate == null || gitignoreTemplate.trim().isEmpty())) {
            return false;
        }
        // 如果要初始化LICENSE但没有指定模板，则无效
        if (isInitLicense() && (licenseTemplate == null || licenseTemplate.trim().isEmpty())) {
            return false;
        }
        return true;
    }
}
